package com.ruoyi.common.utils;

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode;

import java.io.IOException;
import java.util.Iterator;

public class JsonUtils {

    public static void main(String[] args) {
        String jsonString = "[{\"name\":\"规格\",\"options\":[{\"name\":\"1版装\"},{\"name\":\"2版装 \"},{\"name\":null}]},{\"name\":\"颜色\",\"options\":[{\"name\":\"蓝色\"},{\"name\":\"白色\"},{\"name\":null}]}]";
        String s = removeNull(jsonString);
        System.err.println(s);
    }


    /**
     * 将json中 有存在null的去除
     * */
    public  static String removeNull(String jsonString){
            // 解析JSON字符串为JsonNode对象
            ObjectMapper mapper = new ObjectMapper();
            try {
                // 解析JSON字符串为JsonNode对象
                JsonNode rootNode = mapper.readTree(jsonString);

                // 遍历并移除所有{"name":null}
                for (JsonNode categoryNode : rootNode) {
                    if (categoryNode.has("options") && categoryNode.get("options").isArray()) {
                        ArrayNode optionsArray = (ArrayNode) categoryNode.get("options");

                        // 使用迭代器安全地移除"name"为null的项
                        Iterator<JsonNode> optionsIterator = optionsArray.iterator();
                        while (optionsIterator.hasNext()) {
                            JsonNode optionNode = optionsIterator.next();
                            if (optionNode.has("name") && optionNode.get("name").isNull()) {
                                optionsIterator.remove(); // 使用迭代器的remove方法
                            }
                        }
                    }
                }
                // 将修改后的JsonNode对象转换回JSON字符串，保持原始格式
                return mapper.writeValueAsString(rootNode);
            } catch (IOException e) {
                return null;
            }

    }

}
